/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Control;

import Control.exceptions.NonexistentEntityException;
import Control.exceptions.PreexistingEntityException;
import Entidad.Registromonitoreovideo;
import Entidad.RegistromonitoreovideoPK;
import java.io.Serializable;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Query;
import javax.persistence.EntityNotFoundException;
import Entidad.Marca;
import Entidad.Canal;
import Entidad.Archivovideo;
import javax.transaction.UserTransaction;

/**
 *
 * @author pepe
 */
public class RegistromonitoreovideoJpaController extends GeneralJpaCpontroller<Object> implements Serializable {
    
    public RegistromonitoreovideoJpaController(){
    
    }

//    public RegistromonitoreovideoJpaController(UserTransaction utx, EntityManagerFactory emf) {
//        this.utx = utx;
//        this.emf = emf;
//    }
//    private UserTransaction utx = null;
//    private EntityManagerFactory emf = null;
//
//    public EntityManager getEntityManager() {
//        return emf.createEntityManager();
//    }

    public void create(Registromonitoreovideo registromonitoreovideo) throws PreexistingEntityException, Exception {
        if (registromonitoreovideo.getRegistromonitoreovideoPK() == null) {
            registromonitoreovideo.setRegistromonitoreovideoPK(new RegistromonitoreovideoPK());
        }
        registromonitoreovideo.getRegistromonitoreovideoPK().setIdMarca(registromonitoreovideo.getMarca().getIdMarca());
        registromonitoreovideo.getRegistromonitoreovideoPK().setIdArchivoVideo(registromonitoreovideo.getArchivovideo().getIdArchivoVideo());
        registromonitoreovideo.getRegistromonitoreovideoPK().setIdCanal(registromonitoreovideo.getCanal().getIdCanal());
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            Marca marca = registromonitoreovideo.getMarca();
            if (marca != null) {
                marca = em.getReference(marca.getClass(), marca.getIdMarca());
                registromonitoreovideo.setMarca(marca);
            }
            Canal canal = registromonitoreovideo.getCanal();
            if (canal != null) {
                canal = em.getReference(canal.getClass(), canal.getIdCanal());
                registromonitoreovideo.setCanal(canal);
            }
            Archivovideo archivovideo = registromonitoreovideo.getArchivovideo();
            if (archivovideo != null) {
                archivovideo = em.getReference(archivovideo.getClass(), archivovideo.getIdArchivoVideo());
                registromonitoreovideo.setArchivovideo(archivovideo);
            }
            em.persist(registromonitoreovideo);
            if (marca != null) {
                marca.getRegistromonitoreovideoList().add(registromonitoreovideo);
                marca = em.merge(marca);
            }
            if (canal != null) {
                canal.getRegistromonitoreovideoList().add(registromonitoreovideo);
                canal = em.merge(canal);
            }
            if (archivovideo != null) {
                archivovideo.getRegistromonitoreovideoList().add(registromonitoreovideo);
                archivovideo = em.merge(archivovideo);
            }
            em.getTransaction().commit();
        } catch (Exception ex) {
            if (findRegistromonitoreovideo(registromonitoreovideo.getRegistromonitoreovideoPK()) != null) {
                throw new PreexistingEntityException("Registromonitoreovideo " + registromonitoreovideo + " already exists.", ex);
            }
            throw ex;
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public void edit(Registromonitoreovideo registromonitoreovideo) throws NonexistentEntityException, Exception {
        registromonitoreovideo.getRegistromonitoreovideoPK().setIdMarca(registromonitoreovideo.getMarca().getIdMarca());
        registromonitoreovideo.getRegistromonitoreovideoPK().setIdArchivoVideo(registromonitoreovideo.getArchivovideo().getIdArchivoVideo());
        registromonitoreovideo.getRegistromonitoreovideoPK().setIdCanal(registromonitoreovideo.getCanal().getIdCanal());
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            Registromonitoreovideo persistentRegistromonitoreovideo = em.find(Registromonitoreovideo.class, registromonitoreovideo.getRegistromonitoreovideoPK());
            Marca marcaOld = persistentRegistromonitoreovideo.getMarca();
            Marca marcaNew = registromonitoreovideo.getMarca();
            Canal canalOld = persistentRegistromonitoreovideo.getCanal();
            Canal canalNew = registromonitoreovideo.getCanal();
            Archivovideo archivovideoOld = persistentRegistromonitoreovideo.getArchivovideo();
            Archivovideo archivovideoNew = registromonitoreovideo.getArchivovideo();
            if (marcaNew != null) {
                marcaNew = em.getReference(marcaNew.getClass(), marcaNew.getIdMarca());
                registromonitoreovideo.setMarca(marcaNew);
            }
            if (canalNew != null) {
                canalNew = em.getReference(canalNew.getClass(), canalNew.getIdCanal());
                registromonitoreovideo.setCanal(canalNew);
            }
            if (archivovideoNew != null) {
                archivovideoNew = em.getReference(archivovideoNew.getClass(), archivovideoNew.getIdArchivoVideo());
                registromonitoreovideo.setArchivovideo(archivovideoNew);
            }
            registromonitoreovideo = em.merge(registromonitoreovideo);
            if (marcaOld != null && !marcaOld.equals(marcaNew)) {
                marcaOld.getRegistromonitoreovideoList().remove(registromonitoreovideo);
                marcaOld = em.merge(marcaOld);
            }
            if (marcaNew != null && !marcaNew.equals(marcaOld)) {
                marcaNew.getRegistromonitoreovideoList().add(registromonitoreovideo);
                marcaNew = em.merge(marcaNew);
            }
            if (canalOld != null && !canalOld.equals(canalNew)) {
                canalOld.getRegistromonitoreovideoList().remove(registromonitoreovideo);
                canalOld = em.merge(canalOld);
            }
            if (canalNew != null && !canalNew.equals(canalOld)) {
                canalNew.getRegistromonitoreovideoList().add(registromonitoreovideo);
                canalNew = em.merge(canalNew);
            }
            if (archivovideoOld != null && !archivovideoOld.equals(archivovideoNew)) {
                archivovideoOld.getRegistromonitoreovideoList().remove(registromonitoreovideo);
                archivovideoOld = em.merge(archivovideoOld);
            }
            if (archivovideoNew != null && !archivovideoNew.equals(archivovideoOld)) {
                archivovideoNew.getRegistromonitoreovideoList().add(registromonitoreovideo);
                archivovideoNew = em.merge(archivovideoNew);
            }
            em.getTransaction().commit();
        } catch (Exception ex) {
            String msg = ex.getLocalizedMessage();
            if (msg == null || msg.length() == 0) {
                RegistromonitoreovideoPK id = registromonitoreovideo.getRegistromonitoreovideoPK();
                if (findRegistromonitoreovideo(id) == null) {
                    throw new NonexistentEntityException("The registromonitoreovideo with id " + id + " no longer exists.");
                }
            }
            throw ex;
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public void destroy(RegistromonitoreovideoPK id) throws NonexistentEntityException {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            Registromonitoreovideo registromonitoreovideo;
            try {
                registromonitoreovideo = em.getReference(Registromonitoreovideo.class, id);
                registromonitoreovideo.getRegistromonitoreovideoPK();
            } catch (EntityNotFoundException enfe) {
                throw new NonexistentEntityException("The registromonitoreovideo with id " + id + " no longer exists.", enfe);
            }
            Marca marca = registromonitoreovideo.getMarca();
            if (marca != null) {
                marca.getRegistromonitoreovideoList().remove(registromonitoreovideo);
                marca = em.merge(marca);
            }
            Canal canal = registromonitoreovideo.getCanal();
            if (canal != null) {
                canal.getRegistromonitoreovideoList().remove(registromonitoreovideo);
                canal = em.merge(canal);
            }
            Archivovideo archivovideo = registromonitoreovideo.getArchivovideo();
            if (archivovideo != null) {
                archivovideo.getRegistromonitoreovideoList().remove(registromonitoreovideo);
                archivovideo = em.merge(archivovideo);
            }
            em.remove(registromonitoreovideo);
            em.getTransaction().commit();
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public List<Registromonitoreovideo> findRegistromonitoreovideoEntities() {
        return findRegistromonitoreovideoEntities(true, -1, -1);
    }

    public List<Registromonitoreovideo> findRegistromonitoreovideoEntities(int maxResults, int firstResult) {
        return findRegistromonitoreovideoEntities(false, maxResults, firstResult);
    }

    private List<Registromonitoreovideo> findRegistromonitoreovideoEntities(boolean all, int maxResults, int firstResult) {
        EntityManager em = getEntityManager();
        try {
            Query q = em.createQuery("select object(o) from Registromonitoreovideo as o");
            if (!all) {
                q.setMaxResults(maxResults);
                q.setFirstResult(firstResult);
            }
            return q.getResultList();
        } finally {
            em.close();
        }
    }

    public Registromonitoreovideo findRegistromonitoreovideo(RegistromonitoreovideoPK id) {
        EntityManager em = getEntityManager();
        try {
            return em.find(Registromonitoreovideo.class, id);
        } finally {
            em.close();
        }
    }

    public int getRegistromonitoreovideoCount() {
        EntityManager em = getEntityManager();
        try {
            Query q = em.createQuery("select count(o) from Registromonitoreovideo as o");
            return ((Long) q.getSingleResult()).intValue();
        } finally {
            em.close();
        }
    }
    
}
